//
//  FirstViewController.m
//  07-界面通信
//
//  Created by dllo on 16/7/22.
//  Copyright © 2016年 DM.C. All rights reserved.
//

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController ()<SecondVCPassValue>
@property (nonatomic, strong) UILabel *label;
@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 关于baseViewControll
    // 是基类的ViewController
    // 在这个Controller中, 进行统一的修改
    // 例如:统一修改背景色, 坐标系
    // 统一修改navigationBar的barTintColor, TintColor等
    [self createButton];
    [self createLabel];
    self.title = @"第一页";
//     界面通信
//     1.属性传值, 一般常用于从前往后
//     将想要传递的值, 作为后一个页面的属性, 并通过该属性进行一系列操作
//     将FirstViewController的label.text传递给SecondViewController的textField上
//     FirstViewController -> 取到label.text
//            ↓ push                ↓传值
//     SecondViewController -> 使用属性textString将label.text的值传给textField.text
//     属性传值可以从后往前传值(但是不推荐使用)
//     SecondViewController -> 取到 textField.text
//       ↓ pop(获取First的VC)          ↓ 属性传值
//     firstViewController -> 设置了strOfLabel -> 在viewWillAppear这个时间点赋值给label;
//    
//     2.协议传值(delegate)
//     从后往前传值
//                            传值
//     SecondViewController –––––––>FirstViewController
//     用delegate的方式传值
//     1.决定要在second中声明协议 (最难确定)
//     2.声明delegate @property id<Delegate名>delegate
//     3.在哪签协议(只要可以拿到对象, 就可以签订协议)
//     xxx.delegate = self;
//     4.xxx.delegate = self会报黄, ,没签订协议, 签订协议
//     5.签订完协议会报黄, 因为有必须实现的协议方法未实现
//     实现协议方法
//     6.但是协议方法并没有执行, 缺少触发时机
//     在哪里触发需要加判断
    // 3.关于navigation中控制器的释放
    // navigation中viewControlls数组, 数组对对象引用计数 + 1
    // 当你的Controll入栈时, 被加入数组中, 引用计数 + 1
    // 只要不出栈, 就不会释放(根视图控制器永远不释放)
    // A -> push -> B  B入栈, 引用计数 + 1
    // B -> pop -> A   其中的B出栈, 对应释放
}
#pragma mark - 创建label
- (void)createLabel {
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(50, 0, 314, 50)];
    _label.text = @"第一页的值";
    _label.backgroundColor = [UIColor cyanColor];
    _label.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:_label];
    
}
#pragma mark - 创建button
- (void)createButton {
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.backgroundColor = [UIColor redColor];
    button.frame = CGRectMake(100, 150, 214, 60);
    [self.view addSubview:button];
    [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
}
#pragma mark - button的点击方法
- (void)clickButton:(UIButton *)button {
    SecondViewController *second = [[SecondViewController alloc] init];
    second.delegate = self;
    second.textString = _label.text;
    [self.navigationController pushViewController:second animated:YES];
}
#pragma mark - 协议方法
- (void)passValue:(NSString *)string {
    _label.text = string;
    NSLog(@"%@", string);
}
#pragma mark - 属性传值(从后往前传值)
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    _label.text = _strOfLabel;
}
#pragma mark - other
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
